{$CLEO}
{
    Cop Bikers Overhaul 1.0
    Created by Silent
}
0A9F: 0@ = current_thread_pointer
000A: 0@ += 0x10
0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0
0A8F: 3@ = 0@ - @_copBikerModelsByTown
        
0A8F: 2@ = 0@ - @CCopPed__getBikerModel
000A: 2@ += 0x8
0A8C: write_memory 2@ size 4 value 3@ virtual_protect 0 // mov eax, _copBikerModelsByTown[eax*4] 
000A: 2@ += 0x1A
0A8C: write_memory 2@ size 4 value 3@ virtual_protect 0 // mov eax, _copBikerModelsByTown[ecx*4] 
000A: 2@ += 0x1E
0A8C: write_memory 2@ size 4 value 3@ virtual_protect 0 // mov eax, _copBikerModelsByTown[ecx*4] 

0A8F: 2@ = 0@ - @_checkBikerModel
000A: 2@ += 0x3
0A8C: write_memory 2@ size 4 value 3@ virtual_protect 0 // mov eax, _copBikerModelsByTown[ecx*4] 
000A: 2@ += 0x10
0A8E: 1@ = 2@ + 0x4
0A8F: 1@ = 0x407C8D - 1@
0A8C: write_memory 2@ size 4 value 1@ virtual_protect 0 // jnz loc_407C8D
000A: 2@ += 0x15
0A8E: 1@ = 2@ + 0x4
0A8F: 1@ = 0x407CFE - 1@
0A8C: write_memory 2@ size 4 value 1@ virtual_protect 0 // jz loc_407CFE
000A: 2@ += 0x5
0A8E: 1@ = 2@ + 0x4
0A8F: 1@ = 0x407CB3 - 1@
0A8C: write_memory 2@ size 4 value 1@ virtual_protect 0 // jmp loc_407CB3

0A8F: 2@ = 0@ - @_reloadCopModels
000A: 2@ += 0x1B
0A8E: 1@ = 2@ + 0x4
0A8F: 1@ = 0x56E230 - 1@
0A8C: write_memory 2@ size 4 value 1@ virtual_protect 0 // call _getPlayerCWanted
000A: 2@ += 0x12
0A8E: 1@ = 2@ + 0x4
0A8F: 1@ = 0x56E230 - 1@
0A8C: write_memory 2@ size 4 value 1@ virtual_protect 0 // call _getPlayerCWanted
000A: 2@ += 0x45
0A8E: 1@ = 2@ + 0x4
0A8F: 1@ = 0x407180 - 1@
0A8C: write_memory 2@ size 4 value 1@ virtual_protect 0 // call _random
000A: 2@ += 0x41
0A8C: write_memory 2@ size 4 value 3@ virtual_protect 0 // mov eax, _copBikerModelsByTown[edi*4]
000A: 2@ += 0x45
0A8E: 1@ = 2@ + 0x4
0A8F: 1@ = 0x409C10 - 1@
0A8C: write_memory 2@ size 4 value 1@ virtual_protect 0 // call CStreaming__releaseModel  
000A: 2@ += 0x1E
0A8E: 1@ = 2@ + 0x4
0A8F: 1@ = 0x409C10 - 1@
0A8C: write_memory 2@ size 4 value 1@ virtual_protect 0 // call CStreaming__releaseModel
000A: 2@ += 0xA
0A8C: write_memory 2@ size 4 value 3@ virtual_protect 0 // mov edx, _copBikerModelsByTown[esi*4]
000A: 2@ += 0x6
0A8E: 1@ = 2@ + 0x4
0A8F: 1@ = 0x409C10 - 1@
0A8C: write_memory 2@ size 4 value 1@ virtual_protect 0 // call CStreaming__releaseModel
000A: 2@ += 0x7
0A8C: write_memory 2@ size 4 value 3@ virtual_protect 0 // mov eax, _copBikerModelsByTown[esi*4]
000A: 2@ += 0x17
0A8E: 1@ = 2@ + 0x4
0A8F: 1@ = 0x409C10 - 1@
0A8C: write_memory 2@ size 4 value 1@ virtual_protect 0 // call CStreaming__releaseModel
000A: 2@ += 0x10
0A8E: 1@ = 2@ + 0x4
0A8F: 1@ = 0x409C10 - 1@
0A8C: write_memory 2@ size 4 value 1@ virtual_protect 0 // call CStreaming__releaseModel
000A: 2@ += 0x1E
0A8E: 1@ = 2@ + 0x4
0A8F: 1@ = 0x409C10 - 1@
0A8C: write_memory 2@ size 4 value 1@ virtual_protect 0 // call CStreaming__releaseModel
000A: 2@ += 0x1C
0A8E: 1@ = 2@ + 0x4
0A8F: 1@ = 0x4087E0 - 1@
0A8C: write_memory 2@ size 4 value 1@ virtual_protect 0 // call CStreaming__requestModel
000A: 2@ += 0x7
0A8C: write_memory 2@ size 4 value 3@ virtual_protect 0 // mov eax, _copBikerModelsByTown[edi*4] 
000A: 2@ += 0x8
0A8E: 1@ = 2@ + 0x4
0A8F: 1@ = 0x4087E0 - 1@
0A8C: write_memory 2@ size 4 value 1@ virtual_protect 0 // call CStreaming__requestModel
000A: 2@ += 0xF
0A8E: 1@ = 2@ + 0x4
0A8F: 1@ = 0x4087E0 - 1@
0A8C: write_memory 2@ size 4 value 1@ virtual_protect 0 // call CStreaming__requestModel

0A8F: 1@ = 0@ - @_checkBikerModel
000E: 1@ -= 0x407C70
0A8C: write_memory 0x407C6B size 1 value 0xE9 virtual_protect 1
0A8C: write_memory 0x407C6C size 4 value 1@ virtual_protect 1 // jmp _checkBikerModel

0A8F: 1@ = 0@ - @CCopPed__getBikerModel
000E: 1@ -= 0x5DDD8A
0A8C: write_memory 0x5DDD85 size 1 value 0xE8 virtual_protect 1
0A8C: write_memory 0x5DDD86 size 4 value 1@ virtual_protect 1 // call CCopPed__getBikerModel
0A8C: write_memory 0x5DDD8B size 1 value 0x1E virtual_protect 1 // jmp loc_5DDCAD

0A8F: 1@ = 0@ - @_reloadCopModels
000E: 1@ -= 0x40A155
0A8C: write_memory 0x40A150 size 1 value 0xE9 virtual_protect 1
0A8C: write_memory 0x40A151 size 4 value 1@ virtual_protect 1 // jmp _reloadCopModels 

0A8F: 1@ = 0@ - @_patchCopModelIDSwitch
0A8C: write_memory 0x464F58 size 1 value 0xF0 virtual_protect 1 // add ecx, -272 
0A8C: write_memory 0x464F5E size 1 value 0x10 virtual_protect 1 // cmp ecx, 10h
0A8C: write_memory 0x464F64 size 4 value 1@ virtual_protect 1 // jmp ds:_patchCopModelIDSwitch[ecx*4]

0A8C: write_memory 0x8A5AB0 size 4 value 0x0 virtual_protect 1
0A93: end_custom_thread


:_checkBikerModel
hex
8B048D00000000  // mov eax, _copBikerModelsByTown[ecx*4]
8D0480          // lea eax, [eax+eax*4]
381C85D04C8E00  // cmp _loadedObjectInfo.bLoaded[eax*4], bl
0F8500000000    // jnz loc_407C8D  
A19C5A8A00      // mov eax, _copBikeModel    
8D1480          // lea edx, [eax+eax*4] 
381C95D04C8E00  // cmp _loadedObjectInfo.bLoaded[edx*4], bl   
0F8400000000    // jz loc_407CFE   
E900000000      // jmp loc_407CB3
end


:CCopPed__getBikerModel
hex
A11867BA00      // mov eax, _playerTownNumber
8B048500000000  // mov eax, _copBikerModelsByTown[eax*4]  
8D0C80          // lea ecx, [eax+eax*4]
53              // push ebx
8A1C8DD04C8E00  // mov bl, _loadedObjectInfo.bLoaded[ecx*4]
B201            // mov dl, 1
38D3            // cmp bl, dl
741E            // jz short CCopPed__getBikerModel+3C
33C9            // xor ecx, ecx   
    {CCopPed__getBikerModel+1F}     
8B048D00000000  // mov eax, _copBikerModelsByTown[ecx*4]
8D0480          // lea eax, [eax+eax*4]
381485D04C8E00  // cmp _loadedObjectInfo.bLoaded[eax*4], dl
740B            // jz short CCopPed__getBikerModel+3E
41              // inc ecx
83F904          // cmp ecx, 4                           
7CE7            // jl short CCopPed__getBikerModel+1F
83C8FF          // or eax, 0FFFFFFFFh  
    {CCopPed__getBikerModel+3C}  
5B              // pop ebx 
C3              // ret  
    {CCopPed__getBikerModel+3E}
8B048D00000000  // mov eax, _copBikerModelsByTown[ecx*4] 
5B              // pop ebx
C3              // ret   
end


:_reloadCopModels
hex
83FF04          // cmp edi, 4 
0F8FAC010000    // jg _reloadCopModels+1B5
A11429B700      // mov eax, _activeInterior
85C0            // test eax, eax
0F859F010000    // jnz _reloadCopModels+1B5
56              // push esi
57              // push edi
6AFF            // push 0FFFFFFFFh
E800000000      // call _getPlayerCWanted
8B7C2410        // mov edi, [esp+0Ch+arg_0]
83C404          // add esp, 4
85C0            // test eax, eax
7466            // jz short _reloadCopModels+90
6AFF            // push 0FFFFFFFFh
E800000000      // call _getPlayerCWanted
8B482C          // mov ecx, [eax+CWanted.currentWantedLevel]
83C404          // add esp, 4
83F903          // cmp ecx, 3
7D54            // jge short _reloadCopModels+90
85FF            // test edi, edi
7450            // jz short _reloadCopModels+90
A0BF549600      // mov al, _disablePoliceBikes  
84C0            // test al, al
7547            // jnz short _reloadCopModels+90
8B3584CBB700    // mov esi, _currentTime
3935C0549600    // cmp dword_9654C0, esi
7329            // jnb short _reloadCopModels+80
8A15BE549600    // mov dl, byte_9654BE
84D2            // test dl, dl
0F94C0          // setz al
6850C30000      // push C350h
6830750000      // push 7530h
A2BE549600      // mov byte_9654BE, al
E800000000      // call _random
83C408          // add esp, 8
03C6            // add eax, esi
A3C0549600      // mov dword_9654C0, eax
    {_reloadCopModels+80}
A0BE549600      // mov al, byte_9654BE
84C0            // test al, al
740E            // jz short _reloadCopModels+97
BF04000000      // mov edi, 4
EB07            // jmp short _reloadCopModels+97
    {_reloadCopModels+90}
C605BE54960000  // mov byte_9654BE, 0
    {_reloadCopModels+97}
8B04BDA05A8A00  // mov eax, _copModelsByTown[edi*4]
8D1480          // lea edx, [eax+eax*4]
B101            // mov cl, 1
380C95D04C8E00  // cmp _loadedObjectInfo.bLoaded[edx*4], cl
0F85D3000000    // jnz _reloadCopModels+183
8B04BD00000000  // mov eax, _copBikerModelsByTown[edi*4]
8D1480          // lea edx, [eax+eax*4]
380C95D04C8E00  // cmp _loadedObjectInfo.bLoaded[edx*4], cl
0F85BC000000    // jnz _reloadCopModels+183
8B04BD8C5A8A00  // mov eax, _copcarModelsByTown[edi*4]
8D0480          // lea eax, [eax+eax*4]
380C85D04C8E00  // cmp _loadedObjectInfo.bLoaded[eax*4], cl
0F85A5000000    // jnz _reloadCopModels+183
33F6            // xor esi, esi
8BFF            // mov edi, edi
    {_reloadCopModels+E2}
3BF7            // cmp esi, edi    
0F848F000000    // jz _reloadCopModels+179
83FF04          // cmp edi, 4 
745C            // jz short _reloadCopModels+14B
8B0CB5A05A8A00  // mov ecx, _copModelsByTown[esi*4]
51              // push ecx
E800000000      // call CStreaming__releaseModel   
8B14B5A05A8A00  // mov edx, _copModelsByTown[esi*4]  
8B0495C8B0A900  // mov eax, _modelPtrs[edx*4]
0FBF480A        // movsx ecx, word ptr [eax+0Ah] 
81C1204E0000    // add ecx, 4E20h  
51              // push ecx
E800000000      // call CStreaming__releaseModel    
83C408          // add esp, 8
8B14B500000000  // mov edx, _copBikerModelsByTown[esi*4]
52              // push edx
E800000000      // call CStreaming__releaseModel  
8B04B500000000  // mov eax, _copBikerModelsByTown[esi*4]
8B0C85C8B0A900  // mov ecx, _modelPtrs[eax*4]
0FBF510A        // movsx edx, word ptr [ecx+0Ah]
81C2204E0000    // add edx, 4E20h 
52              // push edx
E800000000      // call CStreaming__releaseModel    
83C408          // add esp, 8
    {_reloadCopModels+14B}
8B14B58C5A8A00  // mov edx, _copcarModelsByTown[esi*4]
52              // push edx
E800000000      // call CStreaming__releaseModel
8B04B58C5A8A00  // mov eax, _copcarModelsByTown[esi*4]
8B0C85C8B0A900  // mov ecx, _modelPtrs[eax*4]
0FBF510A        // movsx edx, word ptr [ecx+0Ah]
81C2204E0000    // add edx, 4E20h
52              // push edx
E800000000      // call CStreaming__releaseModel
83C408          // add esp, 8
    {_reloadCopModels+179}
46              // inc esi
83FE04          // cmp esi, 4
0F8C5FFFFFFF    // jl _reloadCopModels+E2
    {_reloadCopModels+183}
8B0CBDA05A8A00  // mov ecx, _copModelsByTown[edi*4]
6A02            // push 2
51              // push ecx
E800000000      // call CStreaming__requestModel
8B04BD00000000  // mov eax, _copBikerModelsByTown[edi*4]
6A02            // push 2
50              // push eax
E800000000      // call CStreaming__requestModel
8B0CBD8C5A8A00  // mov ecx, _copcarModelsByTown[edi*4]
6A02            // push 2
51              // push ecx
E800000000      // call CStreaming__requestModel        
83C418          // add esp, 18h
5F              // pop edi
5E              // pop esi
    {_reloadCopModels+1B5}
C3              // ret
end


:_patchCopModelIDSwitch
hex
684F4600        // loc_464F68
684F4600        // loc_464F68
B54F4600        // locret_464FB5
B54F4600        // locret_464FB5
B54F4600        // locret_464FB5
B54F4600        // locret_464FB5
B54F4600        // locret_464FB5
B54F4600        // locret_464FB5
684F4600        // loc_464F68
684F4600        // loc_464F68
684F4600        // loc_464F68
A84F4600        // loc_464FA8
684F4600        // loc_464F68
784F4600        // loc_464F78
884F4600        // loc_464F88
984F4600        // loc_464F98   
684F4600        // loc_464F68
end 


:_copBikerModelsByTown
hex
20010000        // 288  Cop for countryside
1C010000        // 284  Cop for LS
10010000        // 272  Cop for SF
11010000        // 273  Cop for LV
00000000        // Align
end 